using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using GrFingerXLib;
using System.Runtime.InteropServices;
using System.Drawing;
using System.IO;

/*
 * Nombre archivo: registro_huellasBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla registro_huellas, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 27/08/2011 20:39:32
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class registro_huellasBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "registro_huellas", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "registro_huellas", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(registro_huellas datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO registro_huellas (plantilla_huella,id_empleado_fk,imagen_huella,id_dedo_fk) VALUES (?plantilla_huella,?id_empleado_fk,?imagen_huella,?id_dedo_fk);";
				string strConectionUpdate = "UPDATE registro_huellas SET plantilla_huella = ?plantilla_huella,id_empleado_fk = ?id_empleado_fk,imagen_huella = ?imagen_huella,id_dedo_fk = ?id_dedo_fk WHERE id_huella=?id_huella;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_huella = new MySqlParameter("?id_huella", MySqlDbType.Int32);
				MySqlParameter psqlPlantilla_huella = new MySqlParameter("?plantilla_huella", MySqlDbType.LongBlob);
				MySqlParameter psqlId_empleado_fk = new MySqlParameter("?id_empleado_fk", MySqlDbType.Int32);
				MySqlParameter psqlImagen_huella = new MySqlParameter("?imagen_huella", MySqlDbType.LongBlob);
				MySqlParameter psqlId_dedo_fk = new MySqlParameter("?id_dedo_fk", MySqlDbType.Int32);

				psqlId_huella.Value = datos.Id_huella;
				psqlPlantilla_huella.Value = datos.Plantilla_huella;
				psqlId_empleado_fk.Value = datos.Id_empleado_fk;
				psqlImagen_huella.Value = datos.Imagen_huella;
				psqlId_dedo_fk.Value = datos.Id_dedo_fk;

				if (!Existe("id_huella=" + datos.Id_huella))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_huella
							, psqlPlantilla_huella
							, psqlId_empleado_fk
							, psqlImagen_huella
							, psqlId_dedo_fk
							);
					MessageBox.Show("Se grabo [registro_huellas] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_huella
							, psqlPlantilla_huella
							, psqlId_empleado_fk
							, psqlImagen_huella
							, psqlId_dedo_fk
							);
					MessageBox.Show("Se actualizó [registro_huellas] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(registro_huellas datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_huella='{0}'", datos.Id_huella);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("registro_huellas"
						, new CampoValor("id_empleado_fk", datos.Id_empleado_fk.ToString())
						, new CampoValor("id_dedo_fk", datos.Id_dedo_fk.ToString())
						);
					MessageBox.Show("Se grabo [registro_huellas] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("registro_huellas", filtro
						, new CampoValor("id_empleado_fk", datos.Id_empleado_fk.ToString())
						, new CampoValor("id_dedo_fk", datos.Id_dedo_fk.ToString())
						);
					MessageBox.Show("Se actualizó [registro_huellas] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static registro_huellas Recuperar(string filtro)
		{
			registro_huellas r = new registro_huellas();
			try
			{
                DataTable ds = ListarTodos(filtro);
				if (ds.Rows.Count>0)
				{					
					r.Id_huella = Convert.ToInt32(ds.Rows[0]["id_huella"]);
                    if (ds.Rows[0]["plantilla_huella"] != System.DBNull.Value)
                        r.Plantilla_huella = (byte[])ds.Rows[0]["plantilla_huella"];
                    if (ds.Rows[0]["plantilla_huella"] == System.DBNull.Value)
                        r.Plantilla_huella = null;
					r.Id_empleado_fk = Convert.ToInt32(ds.Rows[0]["id_empleado_fk"]);
					if (ds.Rows[0]["imagen_huella"] != System.DBNull.Value)
						r.Imagen_huella = (byte[])ds.Rows[0]["imagen_huella"];
					if (ds.Rows[0]["imagen_huella"] == System.DBNull.Value)
						r.Imagen_huella = null;
					r.Id_dedo_fk = Convert.ToInt32(ds.Rows[0]["id_dedo_fk"]);
					r.Empleados = empleadosBuilder.Recuperar("id_emp=" + ds.Rows[0]["id_empleado_fk"]);
					r.Dedos = dedosBuilder.Recuperar("id_dedo=" + ds.Rows[0]["id_dedo_fk"]);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

        public static registro_huellas Recuperar_sin_joins(string filtro)
        {
            registro_huellas r = new registro_huellas();
            try
            {
                DataTable ds = ListarTodos(filtro);
                if (ds.Rows.Count > 0)
                {
                    r.Id_huella = Convert.ToInt32(ds.Rows[0]["id_huella"]);
                    if (ds.Rows[0]["plantilla_huella"] != System.DBNull.Value)
                        r.Plantilla_huella = (byte[])ds.Rows[0]["plantilla_huella"];
                    if (ds.Rows[0]["plantilla_huella"] == System.DBNull.Value)
                        r.Plantilla_huella = null;
                    r.Id_empleado_fk = Convert.ToInt32(ds.Rows[0]["id_empleado_fk"]);
                    if (ds.Rows[0]["imagen_huella"] != System.DBNull.Value)
                        r.Imagen_huella = (byte[])ds.Rows[0]["imagen_huella"];
                    if (ds.Rows[0]["imagen_huella"] == System.DBNull.Value)
                        r.Imagen_huella = null;
                    r.Id_dedo_fk = Convert.ToInt32(ds.Rows[0]["id_dedo_fk"]);                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("registro_huellas", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbregistro_huellas, string filtro, string nombre_display)
		{
			cmbregistro_huellas.DataSource = ListarTodos(filtro);
			cmbregistro_huellas.DisplayMember = nombre_display;
			cmbregistro_huellas.ValueMember = "id_huella";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_huella AS id_huella,plantilla_huella AS plantilla_huella,id_empleado_fk AS id_empleado_fk,imagen_huella AS imagen_huella,id_dedo_fk AS id_dedo_fk", "registro_huellas", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

        //public static List<registro_huellas> ListarTodos_List(string filtro)
        //{
        //    List<registro_huellas> r = new List<registro_huellas>();
        //    try
        //    {
        //        DataTable dt = ListarTodos(filtro);
        //        for (int i = 0; i < dt.Rows.Count; i++)
        //            r.Add(Recuperar("id_huella="+dt.Rows[i]["id_huella"]));
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    return r;
        //}

		public static DataTable ListarTodos_Joins_Empleados(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp";
				else
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "registro_huellas, empleados","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

        public static DataTable ListarTodos_Activos(string filtro)
        {
            DataTable r = new DataTable();
            string joins_ = "";
            try
            {
                if (filtro == "")
                    joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp";
                else
                    joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp AND " + filtro;
                r = ValidarBuilder.ListarTodos(joins_, "registro_huellas, empleados", "id_huella, plantilla_huella, id_empleado_fk, id_dedo_fk").Tables[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }

		public static DataTable ListarTodos_Joins_Empleados_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "registro_huellas.id_huella AS registro_huellas.id_huella,registro_huellas.plantilla_huella AS registro_huellas.plantilla_huella,registro_huellas.id_empleado_fk AS registro_huellas.id_empleado_fk,registro_huellas.imagen_huella AS registro_huellas.imagen_huella,registro_huellas.id_dedo_fk AS registro_huellas.id_dedo_fk," + 
							 "empleados.id_emp AS empleados.id_emp,empleados.cedula_emp AS empleados.cedula_emp,empleados.nombre_emp AS empleados.nombre_emp,empleados.apellido_emp AS empleados.apellido_emp,empleados.direccion_emp AS empleados.direccion_emp,empleados.telefono_emp AS empleados.telefono_emp,empleados.id_cat_cargo AS empleados.id_cat_cargo,empleados.genero_emp AS empleados.genero_emp,empleados.id_cat_nivel_acad AS empleados.id_cat_nivel_acad,empleados.fecha_nac_emp AS empleados.fecha_nac_emp,empleados.fecha_contrato_emp AS empleados.fecha_contrato_emp,empleados.id_cat_estado_civil_emp AS empleados.id_cat_estado_civil_emp,empleados.cargas_familiares_emp AS empleados.cargas_familiares_emp,empleados.foto_emp AS empleados.foto_emp,empleados.id_cat_doc_identificacion AS empleados.id_cat_doc_identificacion,empleados.fecha_salida_emp AS empleados.fecha_salida_emp,empleados.estado_emp AS empleados.estado_emp,empleados.cat_jor_id_fk_emp AS empleados.cat_jor_id_fk_emp";
			try
			{
				if(filtro=="")
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp";
				else
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "registro_huellas, empleados",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Dedos(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "registro_huellas.id_dedo_fk = dedos.id_dedo";
				else
					joins_ = "registro_huellas.id_dedo_fk = dedos.id_dedo AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "registro_huellas, dedos","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Dedos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "registro_huellas.id_huella AS registro_huellas.id_huella,registro_huellas.plantilla_huella AS registro_huellas.plantilla_huella,registro_huellas.id_empleado_fk AS registro_huellas.id_empleado_fk,registro_huellas.imagen_huella AS registro_huellas.imagen_huella,registro_huellas.id_dedo_fk AS registro_huellas.id_dedo_fk," + 
							 "dedos.id_dedo AS dedos.id_dedo,dedos.nombre_dedo AS dedos.nombre_dedo,dedos.mano_dedo AS dedos.mano_dedo";
			try
			{
				if(filtro=="")
					joins_ = "registro_huellas.id_dedo_fk = dedos.id_dedo";
				else
					joins_ = "registro_huellas.id_dedo_fk = dedos.id_dedo AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "registro_huellas, dedos",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp AND registro_huellas.id_dedo_fk = dedos.id_dedo ";
				else
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp AND registro_huellas.id_dedo_fk = dedos.id_dedo AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "empleados,dedos,registro_huellas","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "registro_huellas.id_huella AS registro_huellas.id_huella,registro_huellas.plantilla_huella AS registro_huellas.plantilla_huella,registro_huellas.id_empleado_fk AS registro_huellas.id_empleado_fk,registro_huellas.imagen_huella AS registro_huellas.imagen_huella,registro_huellas.id_dedo_fk AS registro_huellas.id_dedo_fk," + 
							 "empleados.id_emp AS empleados.id_emp,empleados.cedula_emp AS empleados.cedula_emp,empleados.nombre_emp AS empleados.nombre_emp,empleados.apellido_emp AS empleados.apellido_emp,empleados.direccion_emp AS empleados.direccion_emp,empleados.telefono_emp AS empleados.telefono_emp,empleados.id_cat_cargo AS empleados.id_cat_cargo,empleados.genero_emp AS empleados.genero_emp,empleados.id_cat_nivel_acad AS empleados.id_cat_nivel_acad,empleados.fecha_nac_emp AS empleados.fecha_nac_emp,empleados.fecha_contrato_emp AS empleados.fecha_contrato_emp,empleados.id_cat_estado_civil_emp AS empleados.id_cat_estado_civil_emp,empleados.cargas_familiares_emp AS empleados.cargas_familiares_emp,empleados.foto_emp AS empleados.foto_emp,empleados.id_cat_doc_identificacion AS empleados.id_cat_doc_identificacion,empleados.fecha_salida_emp AS empleados.fecha_salida_emp,empleados.estado_emp AS empleados.estado_emp,empleados.cat_jor_id_fk_emp AS empleados.cat_jor_id_fk_emp," + 
							 "dedos.id_dedo AS dedos.id_dedo,dedos.nombre_dedo AS dedos.nombre_dedo,dedos.mano_dedo AS dedos.mano_dedo";
			try
			{
				if(filtro=="")
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp AND registro_huellas.id_dedo_fk = dedos.id_dedo ";
				else
					joins_ = "registro_huellas.id_empleado_fk = empleados.id_emp AND registro_huellas.id_dedo_fk = dedos.id_dedo AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "empleados,dedos,registro_huellas",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static registro_huellas valida_campos_registro_huellas(Control ctrl_id_huella,byte[] bin_plantilla_huella,Control ctrl_id_empleado_fk,byte[] bin_imagen_huella,Control ctrl_id_dedo_fk)
		{
			bool r = true;
			registro_huellas new_registro_huellas = new registro_huellas();
			try
			{
				if(ctrl_id_huella.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_huella = (TextBox)ctrl_id_huella;
					if (txt_id_huella.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_huella","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_huella.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_huella","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_registro_huellas.Id_huella = Convert.ToInt32(txt_id_huella.Text);
				}
				if(ctrl_id_huella.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_huella = (ComboBox)ctrl_id_huella;
					if (cmb_id_huella.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_huella","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_registro_huellas.Id_huella = Convert.ToInt32(cmb_id_huella.SelectedValue);
				}
				if (r)
					new_registro_huellas.Plantilla_huella = bin_plantilla_huella;
				if(ctrl_id_empleado_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_empleado_fk = (TextBox)ctrl_id_empleado_fk;
					if (txt_id_empleado_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_empleado_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_empleado_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_empleado_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_registro_huellas.Id_empleado_fk = Convert.ToInt32(txt_id_empleado_fk.Text);
				}
				if(ctrl_id_empleado_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_empleado_fk = (ComboBox)ctrl_id_empleado_fk;
					if (cmb_id_empleado_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_empleado_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_registro_huellas.Id_empleado_fk = Convert.ToInt32(cmb_id_empleado_fk.SelectedValue);
				}
				if (r)
					new_registro_huellas.Imagen_huella = bin_imagen_huella;
				if(ctrl_id_dedo_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_dedo_fk = (TextBox)ctrl_id_dedo_fk;
					if (txt_id_dedo_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_dedo_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_dedo_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_dedo_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_registro_huellas.Id_dedo_fk = Convert.ToInt32(txt_id_dedo_fk.Text);
				}
				if(ctrl_id_dedo_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_dedo_fk = (ComboBox)ctrl_id_dedo_fk;
					if (cmb_id_dedo_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_dedo_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_registro_huellas.Id_dedo_fk = Convert.ToInt32(cmb_id_dedo_fk.SelectedValue);
				}

				if(!r)
					new_registro_huellas = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_registro_huellas;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_huella,byte[] bin_plantilla_huella,Control ctrl_id_empleado_fk,byte[] bin_imagen_huella,Control ctrl_id_dedo_fk)
		{
			try
			{
				registro_huellas new_registro_huellas =valida_campos_registro_huellas(ctrl_id_huella,bin_plantilla_huella,ctrl_id_empleado_fk,bin_imagen_huella,ctrl_id_dedo_fk); 
				if(new_registro_huellas!=null)
					GrabarViaProcedimiento(new_registro_huellas);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

        #region < METODOS FINGERPRINT >

        //public static DataSet ListarTodosSoloID_s()
        //{

        //    DataSet r = new DataSet();
        //    try
        //    {
        //        ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
        //        r = bd.EjecutarSelectDs("id_huella", "registro_huellas", "");
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    return r;
        //}

        public static List<registro_huellas> ListarTodos_List_Activos(string filtro )
        {
            List<registro_huellas> rr = new List<registro_huellas>();
            try
            {
                DataTable ds = ListarTodos_Activos(filtro);
                for (int i = 0; i < ds.Rows.Count; i++)
                {
                    registro_huellas r = new registro_huellas();
                     r.Id_huella = Convert.ToInt32(ds.Rows[i]["id_huella"]);
                    if (ds.Rows[i]["plantilla_huella"] != System.DBNull.Value)
                        r.Plantilla_huella = (byte[])ds.Rows[i]["plantilla_huella"];
                    if (ds.Rows[i]["plantilla_huella"] == System.DBNull.Value)
                        r.Plantilla_huella = null;
                    r.Id_empleado_fk = Convert.ToInt32(ds.Rows[i]["id_empleado_fk"]);                    
                    r.Id_dedo_fk = Convert.ToInt32(ds.Rows[i]["id_dedo_fk"]); 
                    rr.Add(r);
                }
            }
            catch (Exception ex)
            {                
                throw ex;
            }
            return rr;
        }

        public static List<registro_huellas> ListarTodos_List(string filtro)
        {
            List<registro_huellas> rr = new List<registro_huellas>();
            try
            {
                DataTable ds = ListarTodos_Activos(filtro);
                for (int i = 0; i < ds.Rows.Count; i++)
                {
                    registro_huellas r = new registro_huellas();
                    r.Id_huella = Convert.ToInt32(ds.Rows[i]["id_huella"]);
                    if (ds.Rows[i]["plantilla_huella"] != System.DBNull.Value)
                        r.Plantilla_huella = (byte[])ds.Rows[i]["plantilla_huella"];
                    if (ds.Rows[i]["plantilla_huella"] == System.DBNull.Value)
                        r.Plantilla_huella = null;
                    r.Id_empleado_fk = Convert.ToInt32(ds.Rows[i]["id_empleado_fk"]);
                    if (ds.Rows[i]["imagen_huella"] != System.DBNull.Value)
                        r.Imagen_huella = (byte[])ds.Rows[i]["imagen_huella"];
                    if (ds.Rows[i]["imagen_huella"] == System.DBNull.Value)
                        r.Imagen_huella = null;
                    r.Id_dedo_fk = Convert.ToInt32(ds.Rows[i]["id_dedo_fk"]);
                    rr.Add(r);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return rr;
        }

        public static bool Grabar_Huella(registro_huellas datos, TTemplateMySQL tpt)
        {
            int numero = 0;
            bool r = false;
            try
            {
                System.Byte[] temp = new System.Byte[tpt._size + 1];
                System.Array.Copy(tpt._tpt, 0, temp, 0, tpt._size);

                if (temp.Length > 1)
                    datos.Plantilla_huella = temp;
                else
                    datos.Plantilla_huella = null;

                string strConectionInsert = "INSERT INTO registro_huellas (plantilla_huella, id_empleado_fk, imagen_huella,id_dedo_fk)  VALUES (?plantilla_huella, ?id_empleado_fk, ?imagen_huella,?id_dedo_fk);";
                string strConectionUpdate = "UPDATE registro_huellas SET plantilla_huella = ?plantilla_huella,id_empleado_fk = ?id_empleado_fk,imagen_huella = ?imagen_huella,id_dedo_fk = ?id_dedo_fk WHERE id_huella=?id_huella OR (id_dedo_fk=?Id_dedo_fk AND id_empleado_fk=?id_empleado_fk);";

                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);

                MySqlParameter psqlId_huella = new MySqlParameter("?id_huella", MySqlDbType.Int32);
                MySqlParameter psqlPlantilla_huella = new MySqlParameter("?plantilla_huella", MySqlDbType.LongBlob);
                MySqlParameter psqlId_empleado_fk = new MySqlParameter("?id_empleado_fk", MySqlDbType.Int32);
                MySqlParameter psqlImagen_huella = new MySqlParameter("?imagen_huella", MySqlDbType.LongBlob);
                MySqlParameter psqlId_dedo_fk = new MySqlParameter("?id_dedo_fk", MySqlDbType.Int32);

                psqlPlantilla_huella.Value = datos.Plantilla_huella;
                psqlImagen_huella.Value = datos.Imagen_huella;

                psqlId_huella.Value = datos.Id_huella;
                psqlId_empleado_fk.Value = datos.Id_empleado_fk;
                psqlId_dedo_fk.Value = datos.Id_dedo_fk;

                if (!Existe("id_huella=" + datos.Id_huella + " OR (id_dedo_fk=" + datos.Id_dedo_fk + " AND id_empleado_fk="+datos.Id_empleado_fk+")"))
                {
                    numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
                             , psqlPlantilla_huella
                             , psqlId_empleado_fk
                             , psqlImagen_huella
                             , psqlId_dedo_fk);

                }
                else
                {
                    numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
                                 , psqlId_huella
                                 , psqlPlantilla_huella
                                 , psqlId_empleado_fk
                                 , psqlImagen_huella
                                 , psqlId_dedo_fk);
                }
                r = (numero > 0);
            }
            catch
            {
                return false;
            }
            return r;
        }
        public static int UltimoNumero(string tabla, string id, string filtro)
        {
            int numero = 0;
            DataSet r = new DataSet();
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                r = bd.EjecutarSelectDs(string.Format("max({0})", id), tabla, filtro);
                if (r.Tables[0].Rows[0][0] != DBNull.Value)
                    numero = Convert.ToInt32(r.Tables[0].Rows[0][0]);

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return numero;
        }

        public static TTemplateMySQL RecuperHuella_por_id(int id)
        {
            string filtro = "id_huella=" + id;
            TTemplateMySQL tptBlob = new TTemplateMySQL();

            try
            {
                registro_huellas r = Recuperar_sin_joins(filtro);
                long readedBytes;
                tptBlob._size = 0;
                // alloc space
                System.Byte[] temp = new System.Byte[
                    (int)GRConstants.GR_MAX_SIZE_TEMPLATE];
                // get bytes
                //readedBytes = rs.GetBytes(1, 0, temp, 0, temp.Length);
                temp = r.Plantilla_huella;
                readedBytes = r.Plantilla_huella.LongLength;
                // copy to structure
                System.Array.Copy(temp, 0, tptBlob._tpt, 0, (int)readedBytes);
                // set real size
                tptBlob._size = (int)readedBytes;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return tptBlob;
        }

        public static TTemplateMySQL RecuperHuella_por_Imagen(byte[] huella_param)
        {            
            TTemplateMySQL tptBlob = new TTemplateMySQL();

            try
            {                
                long readedBytes;
                tptBlob._size = 0;
                // alloc space
                System.Byte[] temp = new System.Byte[
                    (int)GRConstants.GR_MAX_SIZE_TEMPLATE];
                // get bytes
                //readedBytes = rs.GetBytes(1, 0, temp, 0, temp.Length);
                temp = huella_param;
                readedBytes = huella_param.LongLength;
                // copy to structure
                System.Array.Copy(temp, 0, tptBlob._tpt, 0, (int)readedBytes);
                // set real size
                tptBlob._size = (int)readedBytes;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return tptBlob;
        }
        #endregion
	}
}
